home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!rs
- From: rs@uunet.UU.NET (Rich Salz)
- Newsgroups: comp.sources.unix
- Subject: v10i066: Pascal to C translator, Part02/12
- Message-ID: <705@uunet.UU.NET>
- Date: 27 Jul 87 23:06:45 GMT
- Organization: UUNET Communications Services, Arlington, VA
- Lines: 1546
- Approved: rs@uunet.UU.NET
-
- Submitted-by: Per Bergsten <mcvax!enea!chalmers!holtec!perb>
- Posting-number: Volume 10, Issue 66
- Archive-name: ptoc/Part02
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 2 (of 12)."
- # Contents: ptc.c.3
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'ptc.c.3' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ptc.c.3'\"
- else
- echo shar: Extracting \"'ptc.c.3'\" \(30864 characters\)
- sed "s/^X//" >'ptc.c.3' <<'END_OF_FILE'
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X nextsymbol(*((symset *)Conset[91]));
- X break ;
- X case nparproc:
- X tq->U.V15.tparid = newid(currsym.U.V1.vid);
- X nextsymbol(*((symset *)Conset[92]));
- X if (currsym.st == slpar) {
- X enterscope((declptr)NIL);
- X tq->U.V15.tparparm = psubpar();
- X nextsymbol(*((symset *)Conset[93]));
- X leavescope();
- X } else
- X tq->U.V15.tparparm = (struct S61 *)NIL;
- X tq->U.V15.tpartyp = (struct S61 *)NIL;
- X break ;
- X case nparfunc:
- X tq->U.V15.tparid = newid(currsym.U.V1.vid);
- X nextsymbol(*((symset *)Conset[94]));
- X if (currsym.st == slpar) {
- X enterscope((declptr)NIL);
- X tq->U.V15.tparparm = psubpar();
- X nextsymbol(*((symset *)Conset[95]));
- X leavescope();
- X } else
- X tq->U.V15.tparparm = (struct S61 *)NIL;
- X nextsymbol(*((symset *)Conset[96]));
- X tq->U.V15.tpartyp = oldid(currsym.U.V1.vid, lidentifier);
- X nextsymbol(*((symset *)Conset[97]));
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X } while (!(currsym.st == srpar));
- X R142 = tp;
- X return R142;
- X}
- X
- X treeptr
- Xplabstmt()
- X{
- X register treeptr R143;
- X treeptr tp;
- X
- X nextsymbol(*((symset *)Conset[98]));
- X if (currsym.st == sinteger) {
- X tp = mknode(nlabstmt);
- X tp->U.V25.tlabno = oldlbl(true);
- X nextsymbol(*((symset *)Conset[99]));
- X nextsymbol(*((symset *)Conset[100]));
- X tp->U.V25.tstmt = pstmt();
- X } else
- X tp = pstmt();
- X R143 = tp;
- X return R143;
- X}
- X
- X treeptr
- Xpstmt()
- X{
- X register treeptr R144;
- X treeptr tp;
- X
- X switch (currsym.st) {
- X case sid:
- X tp = psimple();
- X break ;
- X case sif:
- X tp = pif();
- X break ;
- X case swhile:
- X tp = pwhile();
- X break ;
- X case srepeat:
- X tp = prepeat();
- X break ;
- X case sfor:
- X tp = pfor();
- X break ;
- X case scase:
- X tp = pcase();
- X break ;
- X case swith:
- X tp = pwith();
- X break ;
- X case sbegin:
- X tp = pbegin(true);
- X break ;
- X case sgoto:
- X tp = pgoto();
- X break ;
- X case send: case selse: case suntil: case ssemic:
- X tp = mknode(nempty);
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X R144 = tp;
- X return R144;
- X}
- X
- X treeptr
- Xpsimple()
- X{
- X register treeptr R145;
- X treeptr tq, tp;
- X
- X tp = pvariable(oldid(currsym.U.V1.vid, lidentifier));
- X if (currsym.st == sassign) {
- X tq = mknode(nassign);
- X tq->U.V27.tlhs = tp;
- X tq->U.V27.trhs = pexpr((treeptr)NIL);
- X tp = tq;
- X }
- X R145 = tp;
- X return R145;
- X}
- X
- X treeptr
- Xpvariable(varptr)
- X treeptr varptr;
- X{
- X register treeptr R146;
- X treeptr tp, tq;
- X
- X nextsymbol(*((symset *)Conset[101]));
- X if (Member((unsigned)(currsym.st), Conset[102])) {
- X switch (currsym.st) {
- X case slpar:
- X tp = mknode(ncall);
- X tp->U.V30.tcall = varptr;
- X tq = (struct S61 *)NIL;
- X do {
- X if (tq == (struct S61 *)NIL) {
- X tq = pexpr((treeptr)NIL);
- X tp->U.V30.taparm = tq;
- X } else {
- X tq->tnext = pexpr((treeptr)NIL);
- X tq = tq->tnext;
- X }
- X } while (!(currsym.st == srpar));
- X break ;
- X case slbrack:
- X tq = varptr;
- X do {
- X tp = mknode(nindex);
- X tp->U.V39.tvariable = tq;
- X tp->U.V39.toffset = pexpr((treeptr)NIL);
- X tq = tp;
- X } while (!(currsym.st == srbrack));
- X break ;
- X case sdot:
- X tp = mknode(nselect);
- X tp->U.V40.trecord = varptr;
- X nextsymbol(*((symset *)Conset[103]));
- X tq = typeof(varptr);
- X enterscope(tq->U.V21.trscope);
- X tp->U.V40.tfield = oldid(currsym.U.V1.vid, lfield);
- X leavescope();
- X break ;
- X case sarrow:
- X tp = mknode(nderef);
- X tp->U.V42.texps = varptr;
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X tp = pvariable(tp);
- X } else {
- X tp = varptr;
- X if (tp->tt == nid) {
- X tq = idup(tp);
- X if (tq != (struct S61 *)NIL)
- X if (Member((unsigned)(tq->tt), Conset[104])) {
- X tp = mknode(ncall);
- X tp->U.V30.tcall = varptr;
- X tp->U.V30.taparm = (struct S61 *)NIL;
- X }
- X }
- X }
- X R146 = tp;
- X return R146;
- X}
- X
- Xtreeptr pexpr();
- X
- X treeptr
- Xpadjust(tu, tr)
- X treeptr tu, tr;
- X{
- X register treeptr R148;
- X
- X if (pprio.A[(int)(tu->tt) - (int)(nassign)] >= pprio.A[(int)(tr->tt) - (int)(nassign)]) {
- X if (Member((unsigned)(tr->tt), Conset[105]))
- X tr->U.V42.texps = padjust(tu, tr->U.V42.texps);
- X else
- X tr->U.V41.texpl = padjust(tu, tr->U.V41.texpl);
- X R148 = tr;
- X } else {
- X if (Member((unsigned)(tu->tt), Conset[106]))
- X tu->U.V42.texps = tr;
- X else
- X tu->U.V41.texpr = tr;
- X R148 = tu;
- X }
- X return R148;
- X}
- X
- X treeptr
- Xpexpr(tnp)
- X treeptr tnp;
- X{
- X register treeptr R147;
- X treeptr tp, tq;
- X treetyp nt;
- X boolean next;
- X
- X nextsymbol(*((symset *)Conset[107]));
- X next = true;
- X switch (currsym.st) {
- X case splus:
- X tp = mknode(nuplus);
- X tp->U.V42.texps = (struct S61 *)NIL;
- X tp = pexpr(tp);
- X next = false;
- X break ;
- X case sminus:
- X tp = mknode(numinus);
- X tp->U.V42.texps = (struct S61 *)NIL;
- X tp = pexpr(tp);
- X next = false;
- X break ;
- X case snot:
- X tp = mknode(nnot);
- X tp->U.V42.texps = (struct S61 *)NIL;
- X tp = pexpr(tp);
- X next = false;
- X break ;
- X case schar: case sinteger: case sreal: case sstring:
- X tp = mklit();
- X break ;
- X case snil:
- X usenilp = true;
- X tp = mknode(nnil);
- X break ;
- X case sid:
- X tp = pvariable(oldid(currsym.U.V1.vid, lidentifier));
- X next = false;
- X break ;
- X case slpar:
- X tp = mknode(nuplus);
- X tp->U.V42.texps = pexpr((treeptr)NIL);
- X break ;
- X case slbrack:
- X usesets = true;
- X tp = mknode(nset);
- X tp->U.V42.texps = (struct S61 *)NIL;
- X tq = (struct S61 *)NIL;
- X do {
- X if (tq == (struct S61 *)NIL) {
- X tq = pexpr((treeptr)NIL);
- X tp->U.V42.texps = tq;
- X } else {
- X tq->tnext = pexpr((treeptr)NIL);
- X tq = tq->tnext;
- X }
- X } while (!(currsym.st == srbrack));
- X break ;
- X case srbrack:
- X tp = mknode(nempty);
- X next = false;
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X if (next)
- X nextsymbol(*((symset *)Conset[108]));
- X switch (currsym.st) {
- X case sdotdot:
- X nt = nrange;
- X break ;
- X case splus:
- X nt = nplus;
- X break ;
- X case sminus:
- X nt = nminus;
- X break ;
- X case smul:
- X nt = nmul;
- X break ;
- X case sdiv:
- X nt = ndiv;
- X break ;
- X case smod:
- X nt = nmod;
- X break ;
- X case squot:
- X defnams.A[(int)(dreal)]->U.V6.lused = true;
- X nt = nquot;
- X break ;
- X case sand:
- X nt = nand;
- X break ;
- X case sor:
- X nt = nor;
- X break ;
- X case sinn:
- X nt = nin;
- X usesets = true;
- X break ;
- X case sle:
- X nt = nle;
- X break ;
- X case slt:
- X nt = nlt;
- X break ;
- X case seq:
- X nt = neq;
- X break ;
- X case sge:
- X nt = nge;
- X break ;
- X case sgt:
- X nt = ngt;
- X break ;
- X case sne:
- X nt = nne;
- X break ;
- X case scolon:
- X nt = nformat;
- X break ;
- X case sid: case schar: case sinteger: case sreal:
- X case sstring: case snil: case ssemic: case scomma:
- X case slpar: case slbrack: case srpar: case srbrack:
- X case send: case suntil: case sthen: case selse:
- X case sdo: case sdownto: case sto: case sof:
- X nt = nnil;
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X if (Member((unsigned)(nt), Conset[109]))
- X defnams.A[(int)(dboolean)]->U.V6.lused = true;
- X if (nt != nnil) {
- X tq = mknode(nt);
- X tq->U.V41.texpl = tp;
- X tq->U.V41.texpr = (struct S61 *)NIL;
- X tp = pexpr(tq);
- X }
- X if (tnp != (struct S61 *)NIL)
- X tp = padjust(tnp, tp);
- X R147 = tp;
- X return R147;
- X}
- X
- X treeptr
- Xpcase()
- X{
- X register treeptr R149;
- X treeptr tp, tq, tv;
- X
- X tp = mknode(ncase);
- X tp->U.V35.tcasxp = pexpr((treeptr)NIL);
- X checksymbol(*((symset *)Conset[110]));
- X tq = (struct S61 *)NIL;
- X do {
- X if (tq == (struct S61 *)NIL) {
- X tq = mknode(nchoise);
- X tp->U.V35.tcaslst = tq;
- X } else {
- X tq->tnext = mknode(nchoise);
- X tq = tq->tnext;
- X }
- X tv = (struct S61 *)NIL;
- X do {
- X nextsymbol(*((symset *)Conset[111]));
- X if (Member((unsigned)(currsym.st), Conset[112]))
- X goto L999;
- X if (tv == (struct S61 *)NIL) {
- X tv = pconstant(false);
- X tq->U.V36.tchocon = tv;
- X } else {
- X tv->tnext = pconstant(false);
- X tv = tv->tnext;
- X }
- X nextsymbol(*((symset *)Conset[113]));
- X } while (!(currsym.st == scolon));
- X tq->U.V36.tchostmt = plabstmt();
- X } while (!(currsym.st == send));
- XL999:
- X if (currsym.st == sother) {
- X nextsymbol(*((symset *)Conset[114]));
- X if (currsym.st == scolon)
- X nextsymbol(*((symset *)Conset[115]));
- X tp->U.V35.tcasother = pstmt();
- X } else {
- X tp->U.V35.tcasother = (struct S61 *)NIL;
- X usecase = true;
- X }
- X nextsymbol(*((symset *)Conset[116]));
- X R149 = tp;
- X return R149;
- X}
- X
- X treeptr
- Xpif()
- X{
- X register treeptr R150;
- X treeptr tp;
- X
- X tp = mknode(nif);
- X tp->U.V31.tifxp = pexpr((treeptr)NIL);
- X checksymbol(*((symset *)Conset[117]));
- X tp->U.V31.tthen = plabstmt();
- X if (currsym.st == selse)
- X tp->U.V31.telse = plabstmt();
- X else
- X tp->U.V31.telse = (struct S61 *)NIL;
- X R150 = tp;
- X return R150;
- X}
- X
- X treeptr
- Xpwhile()
- X{
- X register treeptr R151;
- X treeptr tp;
- X
- X tp = mknode(nwhile);
- X tp->U.V32.twhixp = pexpr((treeptr)NIL);
- X checksymbol(*((symset *)Conset[118]));
- X tp->U.V32.twhistmt = plabstmt();
- X R151 = tp;
- X return R151;
- X}
- X
- X treeptr
- Xprepeat()
- X{
- X register treeptr R152;
- X treeptr tp, tq;
- X
- X tp = mknode(nrepeat);
- X tq = (struct S61 *)NIL;
- X do {
- X if (tq == (struct S61 *)NIL) {
- X tq = plabstmt();
- X tp->U.V33.treptstmt = tq;
- X } else {
- X tq->tnext = plabstmt();
- X tq = tq->tnext;
- X }
- X checksymbol(*((symset *)Conset[119]));
- X } while (!(currsym.st == suntil));
- X tp->U.V33.treptxp = pexpr((treeptr)NIL);
- X R152 = tp;
- X return R152;
- X}
- X
- X treeptr
- Xpfor()
- X{
- X register treeptr R153;
- X treeptr tp;
- X
- X tp = mknode(nfor);
- X nextsymbol(*((symset *)Conset[120]));
- X tp->U.V34.tforid = oldid(currsym.U.V1.vid, lidentifier);
- X nextsymbol(*((symset *)Conset[121]));
- X tp->U.V34.tfrom = pexpr((treeptr)NIL);
- X checksymbol(*((symset *)Conset[122]));
- X tp->U.V34.tincr = (boolean)(currsym.st == sto);
- X tp->U.V34.tto = pexpr((treeptr)NIL);
- X checksymbol(*((symset *)Conset[123]));
- X tp->U.V34.tforstmt = plabstmt();
- X R153 = tp;
- X return R153;
- X}
- X
- X treeptr
- Xpwith()
- X{
- X register treeptr R154;
- X treeptr tp, tq;
- X
- X tp = mknode(nwith);
- X tq = (struct S61 *)NIL;
- X do {
- X if (tq == (struct S61 *)NIL) {
- X tq = mknode(nwithvar);
- X tp->U.V37.twithvar = tq;
- X } else {
- X tq->tnext = mknode(nwithvar);
- X tq = tq->tnext;
- X }
- X enterscope((declptr)NIL);
- X tq->U.V38.tenv = currscope();
- X tq->U.V38.texpw = pexpr((treeptr)NIL);
- X scopeup(tq->U.V38.texpw);
- X checksymbol(*((symset *)Conset[124]));
- X } while (!(currsym.st == sdo));
- X tp->U.V37.twithstmt = plabstmt();
- X tq = tp->U.V37.twithvar;
- X while (tq != (struct S61 *)NIL) {
- X leavescope();
- X tq = tq->tnext;
- X }
- X R154 = tp;
- X return R154;
- X}
- X
- X treeptr
- Xpgoto()
- X{
- X register treeptr R155;
- X treeptr tp;
- X
- X nextsymbol(*((symset *)Conset[125]));
- X tp = mknode(ngoto);
- X tp->U.V26.tlabel = oldlbl(false);
- X nextsymbol(*((symset *)Conset[126]));
- X R155 = tp;
- X return R155;
- X}
- X
- X treeptr
- Xpbegin(retain)
- X boolean retain;
- X{
- X register treeptr R156;
- X treeptr tp, tq;
- X
- X tq = (struct S61 *)NIL;
- X do {
- X if (tq == (struct S61 *)NIL) {
- X tq = plabstmt();
- X tp = tq;
- X } else {
- X tq->tnext = plabstmt();
- X tq = tq->tnext;
- X }
- X } while (!(currsym.st == send));
- X if (retain) {
- X tq = mknode(nbegin);
- X tq->U.V24.tbegin = tp;
- X tp = tq;
- X }
- X nextsymbol(*((symset *)Conset[127]));
- X R156 = tp;
- X return R156;
- X}
- X
- X void
- Xparse()
- X{
- X nextsymbol(*((symset *)Conset[128]));
- X if (currsym.st == spgm)
- X top = pprogram();
- X else
- X top = pmodule();
- X nextsymbol(*((symset *)Conset[129]));
- X}
- X
- X integer
- Xcvalof(tp)
- X treeptr tp;
- X{
- X register integer R157;
- X integer v;
- X treeptr tq;
- X
- X switch (tp->tt) {
- X case nuplus:
- X R157 = cvalof(tp->U.V42.texps);
- X break ;
- X case numinus:
- X R157 = -cvalof(tp->U.V42.texps);
- X break ;
- X case nnot:
- X R157 = 1 - cvalof(tp->U.V42.texps);
- X break ;
- X case nid:
- X tq = idup(tp);
- X if (tq == (struct S61 *)NIL)
- X fatal(etree);
- X tp = tp->U.V43.tsym->lsymdecl;
- X switch (tq->tt) {
- X case nscalar:
- X v = 0;
- X tq = tq->U.V17.tscalid;
- X while (tq != (struct S61 *)NIL)
- X if (tq == tp)
- X tq = (struct S61 *)NIL;
- X else {
- X v = v + 1;
- X tq = tq->tnext;
- X }
- X R157 = v;
- X break ;
- X case nconst:
- X R157 = cvalof(tq->U.V14.tbind);
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X break ;
- X case ninteger:
- X R157 = tp->U.V43.tsym->U.V10.linum;
- X break ;
- X case nchar:
- X R157 = (unsigned)(tp->U.V43.tsym->U.V11.lchar);
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X return R157;
- X}
- X
- X integer
- Xclower(tp)
- X treeptr tp;
- X{
- X register integer R158;
- X treeptr tq;
- X
- X tq = typeof(tp);
- X if (tq->tt == nscalar)
- X R158 = scalbase;
- X else
- X if (tq->tt == nsubrange)
- X if (tq->tup->tt == nconfarr)
- X R158 = 0;
- X else
- X R158 = cvalof(tq->U.V19.tlo);
- X else
- X if (tq == typnods.A[(int)(tchar)])
- X R158 = 0;
- X else
- X if (tq == typnods.A[(int)(tinteger)])
- X R158 = -maxint;
- X else
- X fatal(etree);
- X return R158;
- X}
- X
- X integer
- Xcupper(tp)
- X treeptr tp;
- X{
- X register integer R159;
- X treeptr tq;
- X integer i;
- X
- X tq = typeof(tp);
- X if (tq->tt == nscalar) {
- X tq = tq->U.V17.tscalid;
- X i = scalbase;
- X while (tq->tnext != (struct S61 *)NIL) {
- X i = i + 1;
- X tq = tq->tnext;
- X }
- X R159 = i;
- X } else
- X if (tq->tt == nsubrange)
- X if (tq->tup->tt == nconfarr)
- X fatal(euprconf);
- X else
- X R159 = cvalof(tq->U.V19.thi);
- X else
- X if (tq == typnods.A[(int)(tchar)])
- X R159 = maxchar;
- X else
- X if (tq == typnods.A[(int)(tinteger)])
- X R159 = maxint;
- X else
- X fatal(etree);
- X return R159;
- X}
- X
- X integer
- Xcrange(tp)
- X treeptr tp;
- X{
- X register integer R160;
- X
- X R160 = cupper(tp) - clower(tp) + 1;
- X return R160;
- X}
- X
- X integer
- Xcsetwords(i)
- X integer i;
- X{
- X register integer R161;
- X
- X i = (i + (C37_setbits)) / (C37_setbits + 1);
- X if (i > maxsetrange)
- X error(esetsize);
- X R161 = i;
- X return R161;
- X}
- X
- X integer
- Xcsetsize(tp)
- X treeptr tp;
- X{
- X register integer R162;
- X treeptr tq;
- X integer i;
- X
- X tq = typeof(tp->U.V18.tof);
- X i = clower(tq);
- X if ((i < 0) || (i >= 6 * (C37_setbits + 1)))
- X error(esetbase);
- X R162 = csetwords(crange(tq)) + 1;
- X return R162;
- X}
- X
- X boolean
- Xislocal(tp)
- X treeptr tp;
- X{
- X register boolean R163;
- X treeptr tq;
- X
- X tq = tp->U.V43.tsym->lsymdecl;
- X while (!(Member((unsigned)(tq->tt), Conset[130])))
- X tq = tq->tup;
- X while (!(Member((unsigned)(tp->tt), Conset[131])))
- X tp = tp->tup;
- X R163 = (boolean)(tp == tq);
- X return R163;
- X}
- X
- Xvoid transform();
- X
- Xvoid renamf();
- X
- X void
- Xcrtnvar(tp)
- X treeptr tp;
- X{
- X while (tp != (struct S61 *)NIL) {
- X switch (tp->tt) {
- X case npgm:
- X crtnvar(tp->U.V13.tsubsub);
- X break ;
- X case nfunc: case nproc:
- X crtnvar(tp->U.V13.tsubsub);
- X crtnvar(tp->U.V13.tsubstmt);
- X break ;
- X case nbegin:
- X crtnvar(tp->U.V24.tbegin);
- X break ;
- X case nif:
- X crtnvar(tp->U.V31.tthen);
- X crtnvar(tp->U.V31.telse);
- X break ;
- X case nwhile:
- X crtnvar(tp->U.V32.twhistmt);
- X break ;
- X case nrepeat:
- X crtnvar(tp->U.V33.treptstmt);
- X break ;
- X case nfor:
- X crtnvar(tp->U.V34.tforstmt);
- X break ;
- X case ncase:
- X crtnvar(tp->U.V35.tcaslst);
- X crtnvar(tp->U.V35.tcasother);
- X break ;
- X case nchoise:
- X crtnvar(tp->U.V36.tchostmt);
- X break ;
- X case nwith:
- X crtnvar(tp->U.V37.twithstmt);
- X break ;
- X case nlabstmt:
- X crtnvar(tp->U.V25.tstmt);
- X break ;
- X case nassign:
- X if (tp->U.V27.tlhs->tt == ncall) {
- X tp->U.V27.tlhs = tp->U.V27.tlhs->U.V30.tcall;
- X tp->U.V27.tlhs->tup = tp;
- X }
- X (*G187_tv) = tp->U.V27.tlhs;
- X if ((*G187_tv)->tt == nid)
- X if ((*G187_tv)->U.V43.tsym == (*G183_ip))
- X (*G187_tv)->U.V43.tsym = (*G185_iq);
- X break ;
- X case nbreak: case npush: case npop: case ngoto:
- X case nempty: case ncall:
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X tp = tp->tnext;
- X }
- X}
- X
- X void
- Xrenamf(tp)
- X treeptr tp;
- X{
- X symptr ip, iq;
- X treeptr tq, tv;
- X symptr *F184;
- X symptr *F186;
- X treeptr *F188;
- X
- X F188 = G187_tv;
- X G187_tv = &tv;
- X F186 = G185_iq;
- X G185_iq = &iq;
- X F184 = G183_ip;
- X G183_ip = &ip;
- X while (tp != (struct S61 *)NIL) {
- X switch (tp->tt) {
- X case npgm: case nproc:
- X renamf(tp->U.V13.tsubsub);
- X break ;
- X case nfunc:
- X tq = mknode(nvar);
- X tq->U.V14.tattr = aregister;
- X tq->tup = tp;
- X tq->U.V14.tidl = newid(mkvariable('R'));
- X tq->U.V14.tidl->tup = tq;
- X tq->U.V14.tbind = tp->U.V13.tfuntyp;
- X tq->tnext = tp->U.V13.tsubvar;
- X tp->U.V13.tsubvar = tq;
- X (*G185_iq) = tq->U.V14.tidl->U.V43.tsym;
- X (*G183_ip) = tp->U.V13.tsubid->U.V43.tsym;
- X crtnvar(tp->U.V13.tsubsub);
- X crtnvar(tp->U.V13.tsubstmt);
- X renamf(tp->U.V13.tsubsub);
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X tp = tp->tnext;
- X }
- X G183_ip = F184;
- X G185_iq = F186;
- X G187_tv = F188;
- X}
- X
- Xvoid extract();
- X
- X treeptr
- Xxtrit(tp, pp, last)
- X treeptr tp, pp;
- X boolean last;
- X{
- X register treeptr R164;
- X treeptr np, rp;
- X idptr ip;
- X
- X np = mknode(ntype);
- X ip = mkvariable('T');
- X np->U.V14.tidl = newid(ip);
- X np->U.V14.tidl->tup = np;
- X rp = oldid(ip, lidentifier);
- X rp->tup = tp->tup;
- X rp->tnext = tp->tnext;
- X np->U.V14.tbind = tp;
- X tp->tup = np;
- X tp->tnext = (struct S61 *)NIL;
- X np->tup = pp;
- X if (last && (pp->U.V13.tsubtype != (struct S61 *)NIL)) {
- X pp = pp->U.V13.tsubtype;
- X while (pp->tnext != (struct S61 *)NIL)
- X pp = pp->tnext;
- X pp->tnext = np;
- X } else {
- X np->tnext = pp->U.V13.tsubtype;
- X pp->U.V13.tsubtype = np;
- X }
- X R164 = rp;
- X return R164;
- X}
- X
- Xtreeptr xtrenum();
- X
- X void
- Xnametype(tp)
- X treeptr tp;
- X{
- X tp = typeof(tp);
- X if (tp->tt == nrecord)
- X if (tp->U.V21.tuid == (struct S59 *)NIL)
- X tp->U.V21.tuid = mkvariable('S');
- X}
- X
- X treeptr
- Xxtrenum(tp, pp)
- X treeptr tp, pp;
- X{
- X register treeptr R165;
- X
- X if (tp != (struct S61 *)NIL) {
- X switch (tp->tt) {
- X case nfield: case ntype: case nvar:
- X tp->U.V14.tbind = xtrenum(tp->U.V14.tbind, pp);
- X break ;
- X case nscalar:
- X if (tp->tup->tt != ntype)
- X tp = xtrit(tp, pp, false);
- X break ;
- X case narray:
- X tp->U.V23.taindx = xtrenum(tp->U.V23.taindx, pp);
- X tp->U.V23.taelem = xtrenum(tp->U.V23.taelem, pp);
- X break ;
- X case nrecord:
- X tp->U.V21.tflist = xtrenum(tp->U.V21.tflist, pp);
- X tp->U.V21.tvlist = xtrenum(tp->U.V21.tvlist, pp);
- X break ;
- X case nvariant:
- X tp->U.V20.tvrnt = xtrenum(tp->U.V20.tvrnt, pp);
- X break ;
- X case nfileof:
- X tp->U.V18.tof = xtrenum(tp->U.V18.tof, pp);
- X break ;
- X case nptr:
- X nametype(tp->U.V16.tptrid);
- X break ;
- X case nid: case nsubrange: case npredef: case nempty:
- X case nsetof:
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X tp->tnext = xtrenum(tp->tnext, pp);
- X }
- X R165 = tp;
- X return R165;
- X}
- X
- X void
- Xextract(tp)
- X treeptr tp;
- X{
- X treeptr vp;
- X
- X while (tp != (struct S61 *)NIL) {
- X tp->U.V13.tsubtype = xtrenum(tp->U.V13.tsubtype, tp);
- X tp->U.V13.tsubvar = xtrenum(tp->U.V13.tsubvar, tp);
- X vp = tp->U.V13.tsubvar;
- X while (vp != (struct S61 *)NIL) {
- X if (Member((unsigned)(vp->U.V14.tbind->tt), Conset[132]))
- X vp->U.V14.tbind = xtrit(vp->U.V14.tbind, tp, true);
- X vp = vp->tnext;
- X }
- X extract(tp->U.V13.tsubsub);
- X tp = tp->tnext;
- X }
- X}
- X
- Xvoid global();
- X
- X void
- Xmarkdecl(xp)
- X treeptr xp;
- X{
- X while (xp != (struct S61 *)NIL) {
- X switch (xp->tt) {
- X case nid:
- X xp->U.V43.tsym->U.V6.lused = false;
- X break ;
- X case nconst:
- X markdecl(xp->U.V14.tidl);
- X break ;
- X case ntype: case nvar: case nvalpar: case nvarpar:
- X case nfield:
- X markdecl(xp->U.V14.tidl);
- X if (xp->U.V14.tbind->tt != nid)
- X markdecl(xp->U.V14.tbind);
- X break ;
- X case nscalar:
- X markdecl(xp->U.V17.tscalid);
- X break ;
- X case nrecord:
- X markdecl(xp->U.V21.tflist);
- X markdecl(xp->U.V21.tvlist);
- X break ;
- X case nvariant:
- X markdecl(xp->U.V20.tvrnt);
- X break ;
- X case nconfarr:
- X if (xp->U.V22.tcelem->tt != nid)
- X markdecl(xp->U.V22.tcelem);
- X break ;
- X case narray:
- X if (xp->U.V23.taelem->tt != nid)
- X markdecl(xp->U.V23.taelem);
- X break ;
- X case nsetof: case nfileof:
- X if (xp->U.V18.tof->tt != nid)
- X markdecl(xp->U.V18.tof);
- X break ;
- X case nparproc: case nparfunc:
- X markdecl(xp->U.V15.tparid);
- X break ;
- X case nptr: case nsubrange:
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X xp = xp->tnext;
- X }
- X}
- X
- X treeptr
- Xmovedecl(tp)
- X treeptr tp;
- X{
- X register treeptr R166;
- X treeptr ip, np;
- X symptr sp;
- X boolean move;
- X
- X if (tp != (struct S61 *)NIL) {
- X move = false;
- X switch (tp->tt) {
- X case nconst: case ntype:
- X ip = tp->U.V14.tidl;
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X while (ip != (struct S61 *)NIL) {
- X if (ip->U.V43.tsym->U.V6.lused) {
- X move = true;
- X sp = ip->U.V43.tsym;
- X if (sp->U.V6.lid->inref > 1) {
- X sp->U.V6.lid = mkrename('M', sp->U.V6.lid);
- X sp->U.V6.lid->inref = sp->U.V6.lid->inref - 1;
- X }
- X ip = (struct S61 *)NIL;
- X } else
- X ip = ip->tnext;
- X }
- X if (move) {
- X np = tp->tnext;
- X tp->tnext = (struct S61 *)NIL;
- X ip = tp;
- X while (ip->tt != npgm)
- X ip = ip->tup;
- X tp->tup = ip;
- X switch (tp->tt) {
- X case nconst:
- X if (ip->U.V13.tsubconst == (struct S61 *)NIL)
- X ip->U.V13.tsubconst = tp;
- X else {
- X ip = ip->U.V13.tsubconst;
- X while (ip->tnext != (struct S61 *)NIL)
- X ip = ip->tnext;
- X ip->tnext = tp;
- X }
- X break ;
- X case ntype:
- X if (ip->U.V13.tsubtype == (struct S61 *)NIL)
- X ip->U.V13.tsubtype = tp;
- X else {
- X ip = ip->U.V13.tsubtype;
- X while (ip->tnext != (struct S61 *)NIL)
- X ip = ip->tnext;
- X ip->tnext = tp;
- X }
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X tp = movedecl(np);
- X } else
- X tp->tnext = movedecl(tp->tnext);
- X }
- X R166 = tp;
- X return R166;
- X}
- X
- Xvoid movevars();
- X
- X void
- Xmoveglob(tp, dp)
- X treeptr tp, dp;
- X{
- X while (tp->tt != npgm)
- X tp = tp->tup;
- X dp->tup = tp;
- X dp->tnext = tp->U.V13.tsubvar;
- X tp->U.V13.tsubvar = dp;
- X}
- X
- X treeptr
- Xstackop(decl, glob, loc)
- X treeptr decl, glob, loc;
- X{
- X register treeptr R167;
- X treeptr op, ip, dp, tp;
- X
- X ip = newid(mkvariable('F'));
- X switch ((*G189_vp)->tt) {
- X case nvarpar: case nvalpar: case nvar:
- X dp = mknode(nvarpar);
- X dp->U.V14.tattr = areference;
- X dp->U.V14.tidl = ip;
- X dp->U.V14.tbind = decl->U.V14.tbind;
- X break ;
- X case nparproc: case nparfunc:
- X dp = mknode((*G189_vp)->tt);
- X dp->U.V15.tparid = ip;
- X dp->U.V15.tparparm = (struct S61 *)NIL;
- X dp->U.V15.tpartyp = (*G189_vp)->U.V15.tpartyp;
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X ip->tup = dp;
- X tp = decl;
- X while (!(Member((unsigned)(tp->tt), Conset[133])))
- X tp = tp->tup;
- X dp->tup = tp;
- X if (tp->U.V13.tsubvar == (struct S61 *)NIL)
- X tp->U.V13.tsubvar = dp;
- X else {
- X tp = tp->U.V13.tsubvar;
- X while (tp->tnext != (struct S61 *)NIL)
- X tp = tp->tnext;
- X tp->tnext = dp;
- X }
- X dp->tnext = (struct S61 *)NIL;
- X op = mknode(npush);
- X op->U.V28.tglob = glob;
- X op->U.V28.tloc = loc;
- X op->U.V28.ttmp = ip;
- X R167 = op;
- X return R167;
- X}
- X
- X void
- Xaddcode(tp, push)
- X treeptr tp, push;
- X{
- X treeptr pop;
- X
- X pop = mknode(npop);
- X pop->U.V28.tglob = push->U.V28.tglob;
- X pop->U.V28.ttmp = push->U.V28.ttmp;
- X pop->U.V28.tloc = (struct S61 *)NIL;
- X push->tnext = tp->U.V13.tsubstmt;
- X tp->U.V13.tsubstmt = push;
- X push->tup = tp;
- X while (push->tnext != (struct S61 *)NIL)
- X push = push->tnext;
- X push->tnext = pop;
- X pop->tup = tp;
- X}
- X
- X void
- Xmovevars(tp, vp)
- X treeptr tp, vp;
- X{
- X treeptr ep, dp, np;
- X idptr ip;
- X symptr sp;
- X treeptr *F190;
- X
- X F190 = G189_vp;
- X G189_vp = &vp;
- X while ((*G189_vp) != (struct S61 *)NIL) {
- X switch ((*G189_vp)->tt) {
- X case nvar: case nvalpar: case nvarpar:
- X dp = (*G189_vp)->U.V14.tidl;
- X break ;
- X case nparproc: case nparfunc:
- X dp = (*G189_vp)->U.V15.tparid;
- X if (dp->U.V43.tsym->U.V6.lused) {
- X ep = mknode((*G189_vp)->tt);
- X ep->U.V15.tparparm = (struct S61 *)NIL;
- X ep->U.V15.tpartyp = (*G189_vp)->U.V15.tpartyp;
- X np = newid(mkrename('G', dp->U.V43.tsym->U.V6.lid));
- X ep->U.V15.tparid = np;
- X np->tup = ep;
- X sp = np->U.V43.tsym;
- X ip = sp->U.V6.lid;
- X np->U.V43.tsym->U.V6.lid = dp->U.V43.tsym->U.V6.lid;
- X dp->U.V43.tsym->U.V6.lid = ip;
- X np->U.V43.tsym = dp->U.V43.tsym;
- X dp->U.V43.tsym = sp;
- X np->U.V43.tsym->lsymdecl = np;
- X dp->U.V43.tsym->lsymdecl = dp;
- X moveglob(tp, ep);
- X addcode(tp, stackop((*G189_vp), np, dp));
- X }
- X goto L555;
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X while (dp != (struct S61 *)NIL) {
- X if (dp->U.V43.tsym->U.V6.lused) {
- X ep = mknode(nvarpar);
- X ep->U.V14.tattr = areference;
- X np = newid(mkrename('G', dp->U.V43.tsym->U.V6.lid));
- X ep->U.V14.tidl = np;
- X np->tup = ep;
- X ep->U.V14.tbind = (*G189_vp)->U.V14.tbind;
- X if (ep->U.V14.tbind->tt == nid)
- X ep->U.V14.tbind->U.V43.tsym->U.V6.lused = true;
- X sp = np->U.V43.tsym;
- X ip = sp->U.V6.lid;
- X np->U.V43.tsym->U.V6.lid = dp->U.V43.tsym->U.V6.lid;
- X dp->U.V43.tsym->U.V6.lid = ip;
- X np->U.V43.tsym = dp->U.V43.tsym;
- X dp->U.V43.tsym = sp;
- X np->U.V43.tsym->lsymdecl = np;
- X dp->U.V43.tsym->lsymdecl = dp;
- X dp->tup->U.V14.tattr = aextern;
- X moveglob(tp, ep);
- X addcode(tp, stackop((*G189_vp), np, dp));
- X }
- X dp = dp->tnext;
- X }
- X L555:
- X (*G189_vp) = (*G189_vp)->tnext;
- X }
- X G189_vp = F190;
- X}
- X
- X void
- Xregistervar(tp)
- X treeptr tp;
- X{
- X treeptr vp, xp;
- X
- X vp = idup(tp);
- X tp = tp->U.V43.tsym->lsymdecl;
- X if ((vp->U.V14.tidl != tp) || (tp->tnext != (struct S61 *)NIL)) {
- X xp = mknode(nvar);
- X xp->U.V14.tattr = anone;
- X xp->U.V14.tidl = tp;
- X tp->tup = xp;
- X xp->tup = vp->tup;
- X xp->U.V14.tbind = vp->U.V14.tbind;
- X xp->tnext = vp->tnext;
- X vp->tnext = xp;
- X if (vp->U.V14.tidl == tp)
- X vp->U.V14.tidl = tp->tnext;
- X else {
- X vp = vp->U.V14.tidl;
- X while (vp->tnext != tp)
- X vp = vp->tnext;
- X vp->tnext = tp->tnext;
- X }
- X tp->tnext = (struct S61 *)NIL;
- X }
- X if (tp->tup->U.V14.tattr == anone)
- X tp->tup->U.V14.tattr = aregister;
- X}
- X
- X void
- Xcklevel(tp)
- X treeptr tp;
- X{
- X tp = tp->U.V43.tsym->lsymdecl;
- X while (!(Member((unsigned)(tp->tt), Conset[134])))
- X tp = tp->tup;
- X if (tp->U.V13.tstat > maxlevel)
- X maxlevel = tp->U.V13.tstat;
- X}
- X
- X void
- Xglobal(tp, dp, depend)
- X treeptr tp, dp;
- X boolean depend;
- X{
- X treeptr ip;
- X boolean dep;
- X
- X while (tp != (struct S61 *)NIL) {
- X switch (tp->tt) {
- X case nproc: case nfunc:
- X markdecl(tp->U.V13.tsubid);
- X markdecl(tp->U.V13.tsubpar);
- X markdecl(tp->U.V13.tsubconst);
- X markdecl(tp->U.V13.tsubtype);
- X markdecl(tp->U.V13.tsubvar);
- X global(tp->U.V13.tsubsub, tp, false);
- X movevars(tp, tp->U.V13.tsubpar);
- X movevars(tp, tp->U.V13.tsubvar);
- X tp->U.V13.tsubtype = movedecl(tp->U.V13.tsubtype);
- X tp->U.V13.tsubconst = movedecl(tp->U.V13.tsubconst);
- X global(tp->U.V13.tsubstmt, tp, true);
- X global(tp->U.V13.tsubpar, tp, false);
- X global(tp->U.V13.tsubvar, tp, false);
- X global(tp->U.V13.tsubtype, tp, false);
- X global(tp->U.V13.tfuntyp, tp, false);
- X break ;
- X case npgm:
- X markdecl(tp->U.V13.tsubconst);
- X markdecl(tp->U.V13.tsubtype);
- X markdecl(tp->U.V13.tsubvar);
- X global(tp->U.V13.tsubsub, tp, false);
- X global(tp->U.V13.tsubstmt, tp, true);
- X break ;
- X case nconst: case ntype: case nvar: case nfield:
- X case nvalpar: case nvarpar:
- X ip = tp->U.V14.tidl;
- X dep = depend;
- X while ((ip != (struct S61 *)NIL) && !dep) {
- X if (ip->U.V43.tsym->U.V6.lused)
- X dep = true;
- X ip = ip->tnext;
- X }
- X global(tp->U.V14.tbind, dp, dep);
- X break ;
- X case nparproc: case nparfunc:
- X global(tp->U.V15.tparparm, dp, depend);
- X global(tp->U.V15.tpartyp, dp, depend);
- X break ;
- X case nsubrange:
- X global(tp->U.V19.tlo, dp, depend);
- X global(tp->U.V19.thi, dp, depend);
- X break ;
- X case nvariant:
- X global(tp->U.V20.tselct, dp, depend);
- X global(tp->U.V20.tvrnt, dp, depend);
- X break ;
- X case nrecord:
- X global(tp->U.V21.tflist, dp, depend);
- X global(tp->U.V21.tvlist, dp, depend);
- X break ;
- X case nconfarr:
- X global(tp->U.V22.tcindx, dp, depend);
- X global(tp->U.V22.tcelem, dp, depend);
- X break ;
- X case narray:
- X global(tp->U.V23.taindx, dp, depend);
- X global(tp->U.V23.taelem, dp, depend);
- X break ;
- X case nfileof: case nsetof:
- X global(tp->U.V18.tof, dp, depend);
- X break ;
- X case nptr:
- X global(tp->U.V16.tptrid, dp, depend);
- X break ;
- X case nscalar:
- X global(tp->U.V17.tscalid, dp, depend);
- X break ;
- X case nbegin:
- X global(tp->U.V24.tbegin, dp, depend);
- X break ;
- X case nif:
- X global(tp->U.V31.tifxp, dp, depend);
- X global(tp->U.V31.tthen, dp, depend);
- X global(tp->U.V31.telse, dp, depend);
- X break ;
- X case nwhile:
- X global(tp->U.V32.twhixp, dp, depend);
- X global(tp->U.V32.twhistmt, dp, depend);
- X break ;
- X case nrepeat:
- X global(tp->U.V33.treptstmt, dp, depend);
- X global(tp->U.V33.treptxp, dp, depend);
- X break ;
- X case nfor:
- X ip = idup(tp->U.V34.tforid);
- X if (Member((unsigned)(ip->tup->tt), Conset[135]))
- X registervar(tp->U.V34.tforid);
- X global(tp->U.V34.tforid, dp, depend);
- X global(tp->U.V34.tfrom, dp, depend);
- X global(tp->U.V34.tto, dp, depend);
- X global(tp->U.V34.tforstmt, dp, depend);
- X break ;
- X case ncase:
- X global(tp->U.V35.tcasxp, dp, depend);
- X global(tp->U.V35.tcaslst, dp, depend);
- X global(tp->U.V35.tcasother, dp, depend);
- X break ;
- X case nchoise:
- X global(tp->U.V36.tchocon, dp, depend);
- X global(tp->U.V36.tchostmt, dp, depend);
- X break ;
- X case nwith:
- X global(tp->U.V37.twithvar, dp, depend);
- X global(tp->U.V37.twithstmt, dp, depend);
- X break ;
- X case nwithvar:
- X ip = typeof(tp->U.V38.texpw);
- X if (ip->U.V21.tuid == (struct S59 *)NIL)
- X ip->U.V21.tuid = mkvariable('S');
- X global(tp->U.V38.texpw, dp, depend);
- X break ;
- X case nlabstmt:
- X global(tp->U.V25.tstmt, dp, depend);
- X break ;
- X case neq: case nne: case nlt: case nle:
- X case ngt: case nge:
- X global(tp->U.V41.texpl, dp, depend);
- X
- X global(tp->U.V41.texpr, dp, depend);
- X ip = typeof(tp->U.V41.texpl);
- X if ((ip == typnods.A[(int)(tstring)]) || (ip->tt == narray))
- X usecomp = true;
- X ip = typeof(tp->U.V41.texpr);
- X if ((ip == typnods.A[(int)(tstring)]) || (ip->tt == narray))
- X usecomp = true;
- X break ;
- X case nin: case nor: case nplus: case nminus:
- X case nand: case nmul: case ndiv: case nmod:
- X case nquot: case nformat: case nrange:
- X global(tp->U.V41.texpl, dp, depend);
- X global(tp->U.V41.texpr, dp, depend);
- X break ;
- X case nassign:
- X global(tp->U.V27.tlhs, dp, depend);
- X global(tp->U.V27.trhs, dp, depend);
- X break ;
- X case nnot: case numinus: case nuplus: case nderef:
- X global(tp->U.V42.texps, dp, depend);
- X break ;
- X case nset:
- X global(tp->U.V42.texps, dp, depend);
- X break ;
- X case nindex:
- X global(tp->U.V39.tvariable, dp, depend);
- X global(tp->U.V39.toffset, dp, depend);
- X break ;
- X case nselect:
- X global(tp->U.V40.trecord, dp, depend);
- X break ;
- X case ncall:
- X global(tp->U.V30.tcall, dp, depend);
- X global(tp->U.V30.taparm, dp, depend);
- X break ;
- X case nid:
- X ip = idup(tp);
- X if (ip == (struct S61 *)NIL)
- X goto L555;
- X do {
- X ip = ip->tup;
- X if (ip == (struct S61 *)NIL)
- X goto L555;
- X } while (!(Member((unsigned)(ip->tt), Conset[136])));
- X if (dp == ip) {
- X if (depend)
- X tp->U.V43.tsym->U.V6.lused = true;
- X } else {
- X tp->U.V43.tsym->U.V6.lused = true;
- X }
- X L555:
- X ;
- X break ;
- X case ngoto:
- X if (!islocal(tp->U.V26.tlabel)) {
- X tp->U.V26.tlabel->U.V43.tsym->U.V9.lgo = true;
- X usejmps = true;
- X cklevel(tp->U.V26.tlabel);
- X }
- X break ;
- X case nbreak: case npush: case npop: case npredef:
- X case nempty: case nchar: case ninteger: case nreal:
- X case nstring: case nnil:
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X tp = tp->tnext;
- X }
- X}
- X
- X void
- Xrenamc()
- X{
- X idptr ip;
- X register cnames cn;
- X
- X {
- X cnames B49 = cabort,
- X B50 = cwrite;
- X
- X if ((int)(B49) <= (int)(B50))
- X for (cn = B49; ; cn = (cnames)((int)(cn)+1)) {
- X ip = mkrename('C', ctable.A[(int)(cn)]);
- X ctable.A[(int)(cn)]->istr = ip->istr;
- X if (cn == B50) break;
- X }
- X }
- X}
- X
- X void
- Xrenamp(tp, on)
- X treeptr tp;
- X boolean on;
- X{
- X symptr sp;
- X
- X while (tp != (struct S61 *)NIL) {
- END_OF_FILE
- if test 30864 -ne `wc -c <'ptc.c.3'`; then
- echo shar: \"'ptc.c.3'\" unpacked with wrong size!
- fi
- # end of 'ptc.c.3'
- fi
- echo shar: End of archive 2 \(of 12\).
- cp /dev/null ark2isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 12 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
-
- Rich $alz "Anger is an energy"
- Cronus Project, BBN Labs rsalz@bbn.com
- Moderator, comp.sources.unix sources@uunet.uu.net
-